package HuffmanTree;

/**
 * Unidad de almacenamiento minima de la codificacion Huffman
 * @author Vinicio Gomez
 * @since 13/09/2012
 * @version 1.0
 */
public class Node {
    /**
     * Representacion en codigo Huffman del caracter del nodo.
     */
    private String repr;
    /**
     * Frecuencia de aparicion del caracter.
     */
    private int freq;
    /**
     * Caracter a codificar.
     */
    private char ch;

    /**
     * Constructor.
     * @param ch el caracter a inicializar en el nodo
     * @pre  n/a
     * @post inicia un nodo con el caracter ch
     * @since 13709/2012
     */
    public Node(char ch) {
        this.ch = ch;
        this.freq = 0;
        this.repr = "";
    }
    
    /**
     * Constructor.
     * @param ch el caracter a inicializar en el nodo
     * @pre  n/a
     * @post inicia un nodo con el caracter ch
     * @since 13709/2012
     */
    public Node(char ch, int freq) {
        this.ch = ch;
        this.freq = freq;
        this.repr = "";
    }

    /**
     * Constructor.
     * @param freq frecuencia inicial del caracter ch
     * @param ch caracter a inicializar en el nodo
     * @pre n/a
     * @post inicia un nodo con el caracter ch y la frecuencia freq
     * @since 13/09/2012
     */
    public Node(int freq) {
        this.freq = freq;
        this.ch = 0;
        this.repr = "";
    }

    /**
     * Obtener la representacion en codigo Huffman del nodo.
     * @return la representacion en codigo Huffman del nodo.
     * @pre n/a.
     * @post la cadena de repr.
     * @since 14/09/2012
     */
    public String getRepr() {
        return repr;
    }

    /**
     * Indicar cual sera la representacion en codigo Huffman del nodo.
     * @param repr la representacion en codigo Huffman del nodo.
     * @pre tener una representacion valida en codigo Huffman para el nodo.
     * @post la representacion es asignada.
     * @since 13/09/2012
     */
    public void setRepr(String repr) {
        this.repr = repr;
    }

    /**
     * Obtener la frecuencia del caracter en la cadena a codificar.
     * @return la frecuencia del caracter de este nodo en la cadena a codificar.
     * @pre n/a
     * @post se obtiene la frecuencia del nodo.
     * @since 13/09/2012
     */
    public int getFreq() {
        return freq;
    }

    /**
     * Obtener el caracter del nodo. 
     * @return el caracter del nodo. 
     * @pre n/a
     * @post el caracter del nodo.
     * @since 13/09/2012
     */
    public char getCh() {
        return ch;
    }

    /**
     * Aumentar la frecuencia del caracter en 1.
     * @pre n/a
     * @post la frecuencia es aumentada en 1
     * @since 13/09/2012
     */
    public void addFreq(){
        freq++;
    }
}
